template<class T, class Container = deque<T>>
class stack
{
private:
    Container _con; // 底层容器

public:
    void push(const T& val)
    {
        _con.push_back(val);
    }

    void pop()
    {
        _con.pop_back();
    }

    T& top()
    {
        return _con.back();
    }

    const T& top() const
    {
        return _con.back();
    }

    int size() const
    {
        return _con.size();
    }

    bool empty() const
    {
        return _con.empty();
    }
};

template<class T, class Container = deque<T>>
class queue
{
private:
    Container _con;

public:
    void push(const T& val)
    {
        _con.push_back(val);
    }

    void pop()
    {
        _con.pop_front();
    }

    T& back()
    {
        return _con.back();
    }

    const T& back() const
    {
        return _con.back();
    }

    T& front()
    {
        return _con.front();
    }

    const T& front() const
    {
        return _con.front();
    }

    int size() const
    {
        return _con.size();
    }

    bool empty() const
    {
        return _con.empty();
    }
};



